/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package UserProfile;

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Johnny
 */
public class BuscaPerfiles {

    public static void main(String arg[]) {
       // 
        ArrayList<ArrayList<Calificacion>> agrupados;
         ArrayList<ArrayList<Calificacion>> aprobados = new ArrayList<ArrayList<Calificacion>>();
         Configuration conf = Configuration.getInstance();
         agrupados = UserDataFileReader.RatingsReadLines(conf.getDBRATINGS());
         /*int i = 50;
         while (true) {
         int numPerfiles = 0;
         for (ArrayList<Calificacion> grupo : agrupados) {
         if (grupo.size() >= i) {
         numPerfiles++;
         }
         }
         System.out.println(i);
         if (numPerfiles < 100) {
         System.err.println(i);
         break;
         } else {
         i++;
         }
         }*/
        int numPerfiles = 0;
         for (ArrayList<Calificacion> grupo : agrupados) {
         if (grupo.size() >= 200 && grupo.size()<=220) {
         aprobados.add(grupo);
         numPerfiles++;
         }
         if(aprobados.size()==100)
             break;
         }
         escribeArchivos(aprobados);
         System.out.print(aprobados.size());
         creaTest();
    }

    public static void escribeArchivos(ArrayList<ArrayList<Calificacion>> perfiles) {
        try {
            FileWriter fr = new FileWriter(Configuration.getInstance().getDBRATINGS());
            BufferedWriter br = new BufferedWriter(fr);
            FileWriter ft = new FileWriter(Configuration.getInstance().getDBTEST());
            BufferedWriter bt = new BufferedWriter(ft);

            for (ArrayList<Calificacion> grupo : perfiles) {
                int limiteRatings = (int) Math.round(grupo.size() * 0.8);
                int i = 0;
                for (Calificacion calificacion : grupo) {
                    String linea = calificacion.getIdUser() + "::" + calificacion.getIdMovie() + "::" + Math.round(calificacion.getRating()) + "::" + "9512315123";
                    // if(i<limiteRatings)
                    //{

                    br.write(linea);
                    br.newLine();
                    //}
                    //else
                    //{
                    if (i > limiteRatings) {
                        bt.write(linea);
                        bt.newLine();
                    }
                    ///
                    i++;
                }
            }
            br.flush();
            bt.flush();
            fr.close();
            ft.close();
        } catch (IOException ex) {
            Logger.getLogger(BuscaPerfiles.class.getName()).log(Level.SEVERE, null, ex);
        }

    }

    public static void creaTest() {
        ArrayList<ArrayList<Calificacion>> agrupados;
        ArrayList<ArrayList<Calificacion>> aprobados = new ArrayList<ArrayList<Calificacion>>();
        Configuration conf = Configuration.getInstance();
        agrupados = UserDataFileReader.RatingsReadLines(conf.getDBTEST());
        for (ArrayList<Calificacion> grupo : agrupados) {
            ArrayList<Calificacion> grupoAprobado = new ArrayList<Calificacion>();
            for (Calificacion calificacion : grupo) {
                if (calificacion.getRating() >= 4) {
                    grupoAprobado.add(calificacion);
                }
            }
            aprobados.add(grupoAprobado);
        }
        escribeTest(aprobados);
        System.out.print(aprobados.size());
    }

    public static void escribeTest(ArrayList<ArrayList<Calificacion>> perfiles) {
        try {
            FileWriter ft = new FileWriter(Configuration.getInstance().getDBTEST());
            BufferedWriter bt = new BufferedWriter(ft);

            for (ArrayList<Calificacion> grupo : perfiles) {
                for (Calificacion calificacion : grupo) {
                    String linea = calificacion.getIdUser() + "::" + calificacion.getIdMovie() + "::" + Math.round(calificacion.getRating()) + "::" + "9512315123";
                    bt.write(linea);
                    bt.newLine();

                }
            }
            bt.flush();
            ft.close();
        } catch (IOException ex) {
            Logger.getLogger(BuscaPerfiles.class.getName()).log(Level.SEVERE, null, ex);
        }

    }
}
